<?php 

/**
 * OfertasPostController
 * 
 * @package Sgit 
 * @author Juan Manuel Martinez Carrillo
 * @copyright Juan Manuel Martinez Carrillo
 * @version 2012
 * @access public
 * @revision 21/02/2012 9:06:
 * 
 */

class OfertasPostController extends Sgit_Controller_Action
{
	
    protected $_main_model='OfertasPost';
    protected $_main_form='OfertasPost';

    
    function _begin(){
        
   
        $this->_element->OfertasAreas = new Sgit_Form_Element_Select_OfertasAreas('id_area_oferta');
        $this->_element->OfertasEstado = new Sgit_Form_Element_Select_OfertasEstado('estado');
     
        $this->id_oferta=$this->_getParam('id_oferta');
        $this->view->id_oferta=$this->id_oferta;
        
        $this->id=$this->_getParam('id');


        $this->_file_upload[1] = Sgit_Util_FileUpload::run('ofertas',$this->id_oferta);


        if (!$this->id_oferta)
        {
            throw new Zend_Controller_Exception(sprintf('ID oferta is required for %s', $this->_controllerName . ':' . $this->_actionName));
        }


        $this->_loadModel('Facilitie');
        $facility=$this->_model->Facilitie->GetAssoc('id_zona','id_usuario');
        
        $acceso_by_zona[1]=Sgit_Util_UserByGroup::run(103);
        $acceso_by_zona[2]=Sgit_Util_UserByGroup::run(104);
        $acceso_by_zona[3]=Sgit_Util_UserByGroup::run(105);
        $acceso_by_zona[4]=Sgit_Util_UserByGroup::run(106);
        $acceso_by_zona[6]=Sgit_Util_UserByGroup::run(107);
        
        $acceso_by_zona[1][]=$facility[1];
        $acceso_by_zona[2][]=$facility[2];
        $acceso_by_zona[3][]=$facility[3];
        $acceso_by_zona[4][]=$facility[4];
        $acceso_by_zona[6][]=$facility[6];
        

        $this->_acceso_todo=    Sgit_Util_UserByGroup::run(101);//101 es el grupo Ofertas Acceso a Todo
        $this->_notificar_todo= Sgit_Util_UserByGroup::run(102);
        
        $this->_acceso_todo=array_merge((array)$this->_acceso_todo,(array)$this->_notificar_todo);
        
        $this->_acceso_by_zona=$acceso_by_zona;


    }


    protected function _rows()
    {
        $this->oferta=$this->getOferta($this->id_oferta);
        $this->view->oferta=$this->oferta;
        
        
        $this->_checkPermiso($this->oferta['accesos'],$this->oferta['id_zona']);


        return $this->_model->default->getPosts($this->id_oferta);
    }
    
    
    
    public function _checkPermiso($accesos,$id_zona='')
    {

        if(empty($accesos))$accesos=array();
        else $accesos= unserialize($accesos);

 
        $validator = new Zend_Validate_InArray($accesos);
        if ($validator->isValid($this->_auth->getIdentity()->id)) {
            return true;
        } 
    
 
        //este en la lista de acceso o que sea superuser
        $validatorsup= new Sgit_Validate_isSuperuser();
        if($validatorsup->isValid()){
            return true;
        }
        
        
        //Esta en la lista de usuarios con acceso a todo en datacenter
        if($id_zona){
            $validator = new Zend_Validate_InArray($this->_acceso_by_zona[$id_zona]);
            if ($validator->isValid($this->_auth->getIdentity()->id))
            {
                return true;
            }
        }

        
        

        throw new Zend_Controller_Exception(sprintf('Access not allowed for this project (%s)',$this->view->oferta['cliente']));

    }


    public function indexAction()
    {
        $rows= $this->_prepareRowsToTr($this->_rows());
        $this->view->rows = $rows;
    }



    


    public function insertarAction()
    {
        $this->_reload(true);
    	$this->_insertar();
    }
    
    public function editarAction()
    {
        $this->_reload(true);
    	$this->_editar();
    }
    
    public function borrarAction()
    {
        $this->_reload(true);
        
        $id = $this->_getParam('id');
        $delete=$this->_model->default->getCol('id',array('respuesta_a=?'=>$id));
        $delete[]=$id;
        
        $n = $this->_model->default->delete(array('id IN (?)'=>$delete));
        $this->postDispatch();
        
        foreach($delete as $iden){
            if($this->_file_upload){
                foreach($this->_file_upload as $filepload){
                    Sgit_Util_removeFiles::run($filepload['tabla'],$filepload['key'],$iden,'delete');
                }
            }
        }
        
        $json['status'] ='ok';
        $this->_helper->json($json);
    
    }
    
    

    protected function _prepareValuesToDb()
    {
        
        $row=$this->_form->getValues();
        
        
        if(!$this->id) $row['fecha']=new Zend_Db_Expr('NOW()');
        
        $row['id_oferta']= $this->id_oferta;
        $row['id_usuario']= $this->_auth->getIdentity()->id;
	

        $respuesta_a=$this->_getParam('respuesta_a');
        if($respuesta_a) {
            $row['respuesta_a'] = $respuesta_a;
            
            $this->tiempoRespuesta($respuesta_a);
        }
        
        
        Sgit_Util_removeFiles::run($this->_file_upload[1]['tabla'],$this->_file_upload[1]['key'],$this->_id,$row[$this->_file_upload[1]['activo']]);
      
         
        unset($row[$this->_file_upload[1]['name']]);
        unset($row[$this->_file_upload[1]['activo']]);
        


        return $row;
    }
    
    
    function tiempoRespuesta($respuesta_a)
    {
        $post_pregunta = $this->_model->default->getRow($respuesta_a);

        if($post_pregunta['necesita_respuesta'])
        {
            if(!$post_pregunta['tiempo_respuesta']){
            
                $fecha_pregunta=new Zend_Date($post_pregunta['fecha'],Zend_Date::ISO_8601);
                $fecha_respuesta=Zend_Date::now();
                $diff = $fecha_respuesta->get() - $fecha_pregunta->get(); //esto modifica fecha
                $record['tiempo_respuesta']=$diff;
                $this->_model->default->updateRow($record,array('id = ?'=> $respuesta_a));
            }
            
        }
        
           

  }
    

    function _afterAddEdit()
    {

        $post = $this->_model->default->getPost($this->_id);      
        $row=$post[0];
        
        
        $this->_loadModel('Ofertas');
        $this->_loadModel('Facilitie');
        $facility=$this->_model->Facilitie->GetAssoc('id_zona','id_usuario');
        
        

        $oferta=$this->_model->Ofertas->getOferta($this->id_oferta);
        
        $server=$this->getRequest()->getServer('SERVER_NAME');
        
        $accesos=unserialize($oferta['accesos']);
        
        $fac=$facility[$oferta['id_zona']];

        unset($accesos[$fac]);
      
      
        $pid = 'OF' . str_pad($oferta['id'], 4, "0", STR_PAD_LEFT);
        $oferta['cliente'] = $pid . ' - ' . $oferta['cliente'];
      
      
        $mail=new Sgit_Mail();
        $entrada['de']=$this->_auth->getIdentity()->id;
        $entrada['destinatarios']=$facility[$oferta['id_zona']];
        $entrada['destinatariosCC']=$accesos;
        $entrada['asunto']=$oferta['codigo_zona'] . ' '. $oferta['cliente'];
        $entrada['body']=$row['notas'];
        $entrada['ira']="http://$server/ofertas-post/index/id_oferta/".$this->id_oferta.'#'.$this->_id;
        $entrada['id_zona']=$oferta['id_zona'];
        $entrada['adjuntos'] = Sgit_Util_getFiles::run('ofertas',$this->id_oferta, $this->_id,true);
        $entrada['notas2']=$this->getNotas();
        
        $mail->sendMsg($entrada);
      
       
    }
 
    function getNotas()
    {
        
    }





    function getOferta($id)
    {
        $this->_loadModel('Ofertas');
        $v = $this->_model->Ofertas->getOferta($id);
        

     
        $v['last_post'] = Sgit_Filter_DateDbToLocalize::filter($v['last_post'],'',$v['created_on']);
        $v['f_prevista'] = Sgit_Filter_DateDbToLocalize::filter($v['f_prevista']);
        $v['f_apertura'] = Sgit_Filter_DateDbToLocalize::filter($v['f_apertura']);

        $v['zona']=($v['zona']) ?  $v['zona']:  $v['ubicacion'];
        
        $v['area'] =    $this->_element->OfertasAreas->getMultiOption($v['id_area_oferta']);
        $v['estado'] =  $this->_element->OfertasEstado->getMultiOption($v['estado']);
        //$v['permitido'] = $this->_checkPermiso($v['accesos']);
        
        $pid = 'OF' . str_pad($v['id'], 4, "0", STR_PAD_LEFT);
        $v['cliente'] = $pid . ' - ' . $v['cliente'];
        
        $v['permisos']=Sgit_Util_UnserializeUsers::run($v['accesos']);
        
        $v['tiempo_empleado'] = Sgit_Filter_SecToHours::filter( $v['tiempo_empleado']*60);
        $v['tiempo_respuesta'] = Sgit_Filter_SecToHours::filter( $v['tiempo_respuesta']);
        


        return $v;
    }



}


